package 双指针.移动零;
/**
 * 题目描述：
 * 移动0
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 * 输入: nums = [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 * 力扣：https://leetcode.cn/problems/move-zeroes/
 * 力扣第283
 * */
/**
 * 题目思路：
 * 快慢指针
 * fast向前扫描，看每个元素
 * slow指向下一个非零元素
 * 遇到非零元素，将fast的值赋给slow
 * 然后补全0即可
 * */
class Solution {
    public void moveZeroes(int[] nums) {
        int slow = 0;
        for(int fast = 0; fast < nums.length;fast++){
            if(nums[fast] != 0){
                nums[slow++] = nums[fast];
            }
        }
        // 后面元素全变成0
        for(int j = slow;j < nums.length;j++){
            nums[j] = 0;
        }
    }
}